<?php

/**
 * UserIdentity represents the data needed to identity a user.
 * It contains the authentication method that checks if the provided
 * data can identity the user.
 */
class UserIdentity extends CUserIdentity {

    /**
     * Authenticates a user.
     * The example implementation makes sure if the username and password
     * are both 'demo'.
     * In practical applications, this should be changed to authenticate
     * against some persistent user identity storage (e.g. database).
     * @return boolean whether authentication succeeds.
     */
    private $_id;

    public function authenticate() {
//        $record = UserRecord::model()->findByAttributes(array('login' => $this->username));
        $record = Yii::app()->db->createCommand()
                    ->select('id_pracownika, login, imie, nazwisko, pass_hash, id_roli')
                    ->from('pracownicy p')
                    ->where('login=:login', array(':login'=>$this->username))
                    ->queryRow();
        if ($record === null) {
            $this->errorCode = self::ERROR_USERNAME_INVALID;
        } else if ($record['pass_hash'] !== md5($this->password)) {
            $this->errorCode = self::ERROR_PASSWORD_INVALID;
        } else {
            $role = Yii::app()->db->createCommand()
                    ->select('*')
                    ->from('role')
                    ->where('id_roli=:id_roli', array(':id_roli'=>$record['id_roli']))
                    ->queryRow();
            
            $this->_id = $record['id_pracownika'];
            $this->setState('name', $record['imie'].' '.$record['nazwisko']);
            $this->setState('roles',$role['nazwa']);
            $this->setState('isGuest', false);
            $this->errorCode = self::ERROR_NONE;
            Yii::log("Logowanie ID ".$record['id_pracownika'], CLogger::LEVEL_INFO);
        }
        return !$this->errorCode;
    }

    public function getId() {
        return $this->_id;
    }
}
